package com.bluesky.desensitization;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @JacksonAnnotationsInside
 * Jackson中的@JacksonAnnotationsInside注解‌用于指示在序列化和反序列化JSON时，只处理当前类的注解，而不处理继承自父类的注解。
 * 这意味着，当使用@JacksonAnnotationsInside注解时，Jackson只会考虑当前类上的注解，而忽略从父类继承的注解
 *
 * @JsonSerialize注解可以应用于类的字段、方法或getter方法上。其基本语法如下：
 *
 * @JsonSerialize(using = CustomSerializer.class)
 * 其中，CustomSerializer是一个实现了JsonSerializer接口的自定义序列化器类。
 * https://blog.csdn.net/xycxycooo/article/details/141230480
 *
 * @JsonSerialize
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
@JsonSerialize(using = DesensitizationJsonSerializable.class)
public @interface Desensitization {

    /**
     * 脱敏策略
     * @return
     */
    DesensitizationStrategy value();
}
